<?php

namespace app\index\controller;
require_once ROOT_PATH."public/wxpayapi/lib/WxPay.Api.php";
require_once ROOT_PATH."public/wxpayapi/example/WxPay.NativePay.php";
use think\Controller;
use think\Request;
use NativePay;
use WxPayUnifiedOrder;
use WxPayConfig;
class Pay extends Common
{
    public function index()
    {
//        (new Auth())->check();
        #查询订单
        $num = session('order_num');
        #根据订单查出订单所得对应的订单信息
        $orderData = db('order')->where('order_num',$num)->find();
        #订单总价
        $totalprice = $orderData['total_price'];
        #将订单中间四位变成*号
        $er = substr($num,4,4);
        $yi = str_replace($er,'****',$num);

        $notify = new NativePay();
        //模式二
        /**
        * 流程：
        * 1、调用统一下单，取得code_url，生成二维码
        * 2、用户扫描二维码，进行支付
        * 3、支付完成之后，微信服务器会通知支付成功
        * 4、在支付成功通知中需要查单确认是否真正支付成功（见：notify.php）
        */
        $input = new WxPayUnifiedOrder();
        $input->SetBody("商城订单支付");
        #订单号, 在回调里修改订单状态用到
        $input->SetAttach($num);
        $input->SetOut_trade_no(WxPayConfig::MCHID.date("YmdHis"));
        #支付金额
        $input->SetTotal_fee("1");
        $input->SetTime_start(date("YmdHis"));
        $input->SetTime_expire(date("YmdHis", time() + 600));
        $input->SetGoods_tag("test");
        #//设置回调地址，支付成功后，微信会自动调用这个文件，返回什么参数，在公众平台的统一下单接口里查看
        $input->SetNotify_url(url('index/pay/notify'));
        $input->SetTrade_type("NATIVE");
        $input->SetProduct_id("123456789");
        $result = $notify->GetPayUrl($input);
        $url2 = $result["code_url"];
        #解析到页面用来判断支付状态,通过ajax传到 checkStatus() 方法
        $number = $num;



        return $this->template('pay',compact('totalprice','yi','url2','number'));
    }

    /**
     * 接收微信支付成功回调修改订单状态
     *
     */
    public function notify()
    {
        #接收微信支付成功的回调数据
        $data = file_get_contents('php://input');
        #将字符串的xml数据转化为PHP对象的形式：　
        $data = simplexml_load_string ($data,'SimpleXmlElement',LIBXML_NOCDATA);
//        dump($data);
        if ($data->return_code == "SUCCESS" && $data->result_code == "SUCCESS")
        {
            db('order')->where('order_num',$data->attach)->update(['status'=>1]);
            return true;
        }
        return false;
    }
    public function checkstatus()
    {
        $num = input('num');
        $data = db('order')->where('order_num',$num)->find();
        if ($data['status']==1)
        {
            return 1;
        }
        else
        {
            return 0;
        }
    }
}
